﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BanVeXemPhim_Presentation
{
    public partial class UserControlAdminQuanLyRapChieu : UserControl
    {
        public UserControlAdminQuanLyRapChieu()
        {
            InitializeComponent();
        }
        private RapChieuDTO[] _dsRap;
        private GheDTO[] _dsGhe;
        private List<UserControlGhe_admin> DsUCGhe;
        public RapChieuDTO[] DsRap
        {
            get { return _dsRap; }
            set
            {
                _dsRap = value;
                if (_dsRap != null)
                {
                    if (_dsRap.Length > 0)
                    {
                        this.comboBoxListRapChieu.Items.Clear();
                        for (int i = 0; i < DsRap.Length; i++)
                        {
                            this.comboBoxListRapChieu.Items.Add(_dsRap[i].TenRap);
                        }
                    }
                }
            }
        }
        private int SoHangDaTao = 0;
        private int SoCotDaTao = 0;

        public int IdRapChieuDangChon()
        {
            if(this.comboBoxListRapChieu.SelectedIndex>=0)
            {
                int n = this.comboBoxListRapChieu.Items.Count;
                for(int i=0;i<n;i++)
                {
                    if (DsRap[i].TenRap == this.comboBoxListRapChieu.Text)
                        return DsRap[i].IdRapChieu;
                }
            }
            return -1;
        }
        public GheDTO[] DsGhe
        {
            get { return _dsGhe; }
            set { _dsGhe = value; }
        }
        private void UserControlAdminQuanLyRapChieu_Load(object sender, EventArgs e)
        {
            DsUCGhe = new List<UserControlGhe_admin>();
            CapNhatDanhSachRap();
        }
        public void CapNhatDanhSachRap()
        {
            RapChieuControl rapChieuControl = new RapChieuControl();
            DsRap = rapChieuControl.DanhSachRapChieu();
        }

        public void CapNhatManHinh(RapChieuDTO rapChieuDto)
        {
            CapNhatDanhSachRap();
            if(rapChieuDto!=null)
            {
               // CapNhatTinhTrangGheTrongRap();
                CapNhatMoHinhGhe(rapChieuDto);
                HienThiThongTinRapChieuChiTiet(rapChieuDto);
            }
        }

        public void CapNhatMoHinhGhe(RapChieuDTO rapChieuDto)
        {
            ClearDSGhe();
            GheControl gheControl = new GheControl();
            DsGhe = gheControl.LayDanhSachGheTheoRap(rapChieuDto.IdRapChieu);
            SoHangDaTao=DsGhe[DsGhe.Length - 1].Hang+1;
            SoCotDaTao = DsGhe[DsGhe.Length - 1].Cot+1;
            int n = DsGhe.Length;
            for (int i = 0; i < n; i++)
            {
                //if(DsGhe[i].Cot<rapChieuDto.SoCot && DsGhe[i].Hang<rapChieuDto.SoHang)
                //{
                    UserControlGhe_admin userControlGheAdmin = new UserControlGhe_admin();
                    userControlGheAdmin.Cot = DsGhe[i].Cot;
                    userControlGheAdmin.Hang = DsGhe[i].Hang;
                    userControlGheAdmin.IdGhe = DsGhe[i].IdGhe;
                    userControlGheAdmin.LoaiGhe = DsGhe[i].LoaiGhe;
                    userControlGheAdmin.Visible = false;
                    userControlGheAdmin.Location = new System.Drawing.Point(DsGhe[i].Cot * 25, DsGhe[i].Hang * 25);
                    userControlGheAdmin.Size = new System.Drawing.Size(25, 25);
                    userControlGheAdmin.TinhTrang = DsGhe[i].TinhTrang;
                    DsUCGhe.Add(userControlGheAdmin);
                    this.Controls.Add(userControlGheAdmin);
                    this.panel2.Controls.Add(userControlGheAdmin);
               // }

            }
            foreach (UserControlGhe_admin var in DsUCGhe)
            {
                var.Visible = true;
            }
        }
        public void ClearDSGhe()
        {
            int n = DsUCGhe.Count;
            for(int i=0;i<n;i++)
            {
                DsUCGhe[i].Visible = false;
            }
            for(int i=0;i<n;i++)
            {
                DsUCGhe[i].Dispose();
            }
            DsUCGhe.Clear();
        }
        public void HienThiThongTinRapChieuChiTiet(RapChieuDTO rapChieuDto)
        {
            this.textBoxTenRap.Text = rapChieuDto.TenRap;
            this.textBoxViTri.Text = rapChieuDto.ViTri;
            if(rapChieuDto.TinhTrang==1)
            {
                this.checkBoxTinhTrangDangSuDung.Checked = true;
            }
            else
            {
                this.checkBoxTinhTrangDangSuDung.Checked = false;
            }
            this.textBoxSoCot.Text = rapChieuDto.SoCot.ToString();
            this.textBoxSoHang.Text = rapChieuDto.SoHang.ToString();
            this.comboBoxListRapChieu.Text = rapChieuDto.TenRap;
        }
        private void comboBoxListRapChieu_SelectedIndexChanged(object sender, EventArgs e)
        {
            RapChieuDTO rapChieuDto = RapChieuDangChon();
            CapNhatMoHinhGhe(rapChieuDto);
            HienThiThongTinRapChieuChiTiet(rapChieuDto);
        }
        public RapChieuDTO RapChieuDangChon()
        {
            for (int i=0; i < DsRap.Length;i++ )
            {
                if(DsRap[i].TenRap==this.comboBoxListRapChieu.Text)
                {
                    return DsRap[i];
                }
            }
            return null;
        }
        private void buttonXoaThongTinTrenManHinh_Click(object sender, EventArgs e)
        {
            this.textBoxTenRap.Text = "";
            this.textBoxViTri.Text = "";
            this.checkBoxTinhTrangDangSuDung.Checked = false;
            this.textBoxSoCot.Text = "";
            this.textBoxSoHang.Text = "";
        }
        //Lưu thay đổi trên rạp chiếu.
        private void buttonLuuThayDoi_Click(object sender, EventArgs e)
        {
            if(_dsGhe!=null)
            {
                if(_dsGhe.Length>0)
                {
                    GheControl gheControl=new GheControl();
                    CapNhatTinhTrangGheTrongRap();
                    CapNhatMoHinhGhe(RapChieuDangChon());
                }
            }
        }
        public void CapNhatTinhTrangGheTrongRap()
        {
            List<GheDTO> dsGhe=new List<GheDTO>();
            foreach (UserControlGhe_admin ghe in DsUCGhe)
            {
                GheDTO gheDto=new GheDTO();
                gheDto.Hang = ghe.Hang;
                gheDto.Cot = ghe.Cot;
                gheDto.IdGhe = ghe.IdGhe;
                gheDto.TinhTrang = ghe.TinhTrang;
                gheDto.LoaiGhe = ghe.LoaiGhe;
                dsGhe.Add(gheDto);
            }
            GheControl gheControl=new GheControl();
            gheControl.CapNhatDanhSachGhe(dsGhe.ToArray());
        }

        private void buttonTaoMoiRap_Click(object sender, EventArgs e)
        {
            RapChieuDTO rapChieuDto=new RapChieuDTO();
            LayThongTinRap(ref rapChieuDto);
            if(rapChieuDto!=null)
            {
                RapChieuControl rapChieuControl=new RapChieuControl();
                rapChieuControl.ThemRapChieu(ref rapChieuDto);
                CapNhatManHinh(rapChieuDto);
            }

        }
        public void LayThongTinRap(ref RapChieuDTO rapchieu)
        {
            if (this.textBoxTenRap.Text == "" || this.textBoxViTri.Text=="" || this.textBoxSoCot.Text=="" || this.textBoxSoHang.Text=="" )
            {
                MessageBox.Show("Chưa nhập đầy đủ thông tin!!");
                rapchieu = null;
                return;
            }
            rapchieu.TenRap = this.textBoxTenRap.Text;
            rapchieu.ViTri = this.textBoxViTri.Text;
            rapchieu.SoHang = Convert.ToInt32(this.textBoxSoHang.Text);
            rapchieu.SoCot = Convert.ToInt32(this.textBoxSoCot.Text);
            rapchieu.TinhTrang = (this.checkBoxTinhTrangDangSuDung.Checked == true ? 1 : 0);
        }
        private void buttonSuaThongTin_Click(object sender, EventArgs e)
        {
            int idRapChieu = IdRapChieuDangChon();
            if(idRapChieu==-1)
            {
                MessageBox.Show("Chưa có" +
                                " rạp chiếu được chọn !!");
                return;
            }
            else
            {
                RapChieuDTO rapChieuDto=new RapChieuDTO();
                LayThongTinRap(ref rapChieuDto);
                rapChieuDto.IdRapChieu = idRapChieu;
                RapChieuControl rapChieuControl=new RapChieuControl();
                rapChieuControl.CapNhatThongTinRapChieu(rapChieuDto);
                //Cập nhật danh sách ghế trong bảng ghế, cần biết số hàng, số cột cũ mới.
                //Trường hợp chưa có danh sách ghế.
                GheControl gheControl=new GheControl();

                int OldHang = DsRap[this.comboBoxListRapChieu.SelectedIndex].SoHang;
                int OldCot = DsRap[this.comboBoxListRapChieu.SelectedIndex].SoCot;
                int SoGheDaKhoiTao = DsUCGhe.Count;


                CapNhatTinhTrangGheTrongRap();
                gheControl.CapNhatTheoSoLuongHangCot(rapChieuDto, OldHang, OldCot, SoHangDaTao, SoCotDaTao);
                //Trường hợp danh sách ghế bị thu hẹp
                
                //Trường hợp danh sách ghế mở rộng hơn.

                CapNhatManHinh(rapChieuDto);
                MessageBox.Show("Cập nhật thành công!");
            }
        }
    }
}
